package com.xy.server.util;

//导入需要的包
import java.awt.*;
import java.io.*;
import java.io.File;
import java.io.FileOutputStream;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

/*
 * 当导入一下这两个包时，MyEclipse会报错：
 * Access restriction: The type JPEGImageEncoder is not accessible due to
restriction on required library C:\Java\jre1.6.0_07\lib\rt.jar
 * 解决方法
 * Eclipse默认把这些受访问限制的API设成了ERROR。
 * 只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的
 * Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。
 */
//import com.sun.image.codec.jpeg.JPEGCodec;
//import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.imageio.ImageIO;


public class ImageMergeUtil {

    public ImageMergeUtil() {}

    public static void main(String[] args) {
        try {
            ImageMergeUtil test = new ImageMergeUtil();
//            test.ImageMerge();
        } catch (Exception e) {
            System.out.print(e);
        }
    }

    public static String imageMerge(String originFileName,List<String> filePathList) throws Exception {

//        List<String> filePathList = new ArrayList<>();

//        filePathList.add("/Users/agan/IdeaProjects/apache-tomcat-8.5.23-xy/webapps/res/2018-04-06_14.25.50_cut__1522995956630.png");
//        filePathList.add("/Users/agan/IdeaProjects/apache-tomcat-8.5.23-xy/webapps/res/2018-04-06_14.24.16_cut__1522995857176.png");
//        filePathList.add("/Users/agan/IdeaProjects/apache-tomcat-8.5.23-xy/webapps/res/2018-04-06_14.23.52_cut__1522995833540.png");
        //filePathList.add("/Users/agan/IdeaProjects/apache-tomcat-8.5.23-xy/webapps/res/2018-04-06_14.27.37_cut__1522996058146.png");
        //filePathList.add("/Users/agan/IdeaProjects/apache-tomcat-8.5.23-xy/webapps/res/2018-02-27_00.24.13_cut__1519662255039.png");

        List<Image> imageList = new ArrayList<>();

        for(String filePath: filePathList){
            File file = new File(filePath);
            imageList.add(javax.imageio.ImageIO.read(file));

        }
        //创建四个文件对象（注：这里四张图片的宽度都是相同的，因此下文定义BufferedImage宽度就取第一只的宽度就行了）


        int padding = 30;
        //获取图片的宽度
        int heightImg = 240;
        //获取各个图像的高度
        int widthImg = 240;

        int width = widthImg + padding*2;
        int height = heightImg + padding*2;

        //构造一个类型为预定义图像类型之一的 BufferedImage。 宽度为第一只的宽度，高度为各个图片高度之和
        BufferedImage tag = new BufferedImage(width*5, height, BufferedImage.TYPE_INT_RGB);
        //创建输出流

        String name = originFileName.substring(0,originFileName.lastIndexOf("."));

        String ext = originFileName.substring(originFileName.lastIndexOf("."));

        String filename = name + "_merge_" + new java.util.Date().getTime() + ext;



        //绘制合成图像
        Graphics g = tag.createGraphics();
        //设置颜色。
        g.setColor(Color.WHITE);
        g.fillRect(0,0,width*5,height);

        for(int i = 0 ; i < imageList.size() ; ++i){
            Image image = imageList.get(i);

            int x = 0;
            int y = 0;
            int nWidth,nHeight;
            int tWidth = image.getWidth(null);
            int tHeight = image.getHeight(null);

            if(tWidth > tHeight){
                x = 0;
                nWidth = widthImg;
                nHeight = (int) (widthImg*tHeight*1.0/tWidth);

                y = (heightImg - nHeight)/2;

            }else{
                nHeight = heightImg;
                nWidth = (int) (heightImg*tWidth*1.0/tHeight);
                y = 0;
                x = (widthImg - nWidth)/2;
            }

            g.drawImage(image, padding + width*i + x, padding + y, nWidth, nHeight, null);
        }

//        //最后一个参数用来设置字体的大小
//        Font f = new Font("宋体",Font.PLAIN,50);
//        Color mycolor = Color.red;//new Color(0, 0, 255);
//        g.setColor(mycolor);
//        g.setFont(f);
//
//        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
//        g.drawString("悲伤",100,135);


        // 释放此图形的上下文以及它使用的所有系统资源。
        g.dispose();

//        String formatName = dstName.substring(dstName.lastIndexOf(".") + 1);
//
//        FileOutputStream out = new FileOutputStream(ServerUtil.ResPath + filename);
//        //将绘制的图像生成至输出流
//        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
//        encoder.encode(tag);
//        //关闭输出流
//        out.close();

        ImageIO.write(tag, /*"GIF"*/ "jpg" /* format desired */ , new File(ServerUtil.ResPath + filename) /* target */ );

        System.out.println("藏宝图出来了");

        return filename;
    }



}
